#pragma once
#include "../DXUT/Core/DXUT.h"
#include "../DXUT/Optional/DXUTCamera.h"
#include "../Effects11/Inc/d3dx11effect.h"
#include "../Utility/D3D/D3DUtilityFunction.h"
#include "../Utility/DirectoryUtil.h"
class RenderTech
{
public:
	RenderTech(void);
	virtual ~RenderTech(void);
	//D3D series functions
	virtual HRESULT OnD3D11CreateDevice( ID3D11Device* pd3dDevice, CDirectoryUtil* pDirUtil, void* pUserContext) = 0;
	virtual HRESULT OnD3D11ResizedSwapChain( ID3D11Device* pd3dDevice, IDXGISwapChain* pSwapChain,
                                         const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc, CDirectoryUtil* pDirUtil, void* pUserContext )= 0;
	virtual void OnD3D11ReleasingSwapChain( void* pUserContext )= 0;
	virtual void OnD3D11DestroyDevice( void* pUserContext ){	SAFE_RELEASE(m_pEffect);	}
	virtual void OnD3D11FrameRender( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3dImmediateContext, CBaseCamera* pViewCamera, CDirectoryUtil* pDirUtil, double fTime,
                                 float fElapsedTime, void* pUserContext )= 0;
	virtual void InitEffectsVariables() = 0;
	virtual void ReloadEffectsDebug(ID3D11Device* pd3dDevice, CDirectoryUtil* pDirUtil) = 0;
	//virtual void OnGUIEvent( UINT nEvent, int nControlID, CDXUTControl* pControl, void* pUserContext ){}
public:
	//D3D series members
	ID3DX11Effect*              m_pEffect;	
};

